home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / nfs_func.inc < prev    next >
Text File  |  2005-03-31  |  7KB  |  357 lines

  1. # -*- Fundamental -*-
  2. # NFS functions
  3. #
  4. # mount(soc, share)    - Mounts an NFS share and returns a file handle
  5. #              (soc is a socket opened to the mount daemon)
  6. #
  7. # readdir(soc, fid)    - Returns the content of the directory pointed by
  8. #              <fid>. (soc is a socket opened to the NFS daemon)
  9. #
  10. # cwd(soc, fid, dir)    - Changes the working directory to <dir>. Returns
  11. #              a new fid
  12. #
  13. # umount(soc, share)    - Tells the remote NFS server we don't need its services
  14. #                  any more (soc is a socket opened to the mount daemon)
  15. #
  16. #
  17. # $Id: nfs_func.inc,v 1.6 2004/06/11 16:16:27 renaud Exp $
  18.  
  19. function padsz(len)
  20. {
  21.  if(len % 4)
  22.   return 4 - len % 4;
  23.  else
  24.   return 0;
  25. }
  26.  
  27. function rpclong(val)
  28. {
  29.  local_var ret;
  30.  
  31.  ret = raw_string(val / (256*256*256),
  32.            val / (256*256),
  33.           val /  256,
  34.           val % 256);
  35.  return ret;          
  36. }
  37.  
  38.  
  39. function str2long(val, idx)
  40. {
  41.  local_var ret;
  42.  ret = ord(val[idx]) * 256 * 256 * 256 + 
  43.        ord(val[idx+1]) * 256 * 256 +
  44.        ord(val[idx+2]) * 256 +
  45.        ord(val[idx+3]);
  46.        
  47.   return int(ret);
  48. }
  49.  
  50.  
  51.  
  52. function rpcpad(pad)
  53. {
  54.  return crap(length:pad, data:raw_string(0));
  55. }
  56.  
  57.  
  58.  
  59.  
  60. function mount(soc, share)
  61. {
  62.   local_var pad, req, len, r, ret, i;
  63.   
  64.   pad = padsz(len:strlen(this_host_name()));
  65.   len = 52 + strlen(this_host_name()) + pad;
  66.   
  67.   req =        rpclong(val:rand()) +
  68.              rpclong(val:0) +
  69.            rpclong(val:2) +
  70.            rpclong(val:100005) +
  71.            rpclong(val:1) +
  72.            rpclong(val:1) +
  73.            rpclong(val:1) +
  74.            rpclong(val:len) +
  75.            rpclong(val:rand()) +
  76.            rpclong(val:strlen(this_host_name())) +
  77.            this_host_name() +
  78.            rpcpad(pad:pad) +
  79.            rpclong(val:0)  +    
  80.            rpclong(val:0)  +    
  81.            rpclong(val:7)  +    
  82.            rpclong(val:0)  +    
  83.            rpclong(val:2)  +     
  84.            rpclong(val:3)  +    
  85.            rpclong(val:4)  +
  86.            rpclong(val:5)  +
  87.            rpclong(val:20) +
  88.            rpclong(val:31) +
  89.            rpclong(val:0)  +    
  90.            rpclong(val:0)  +
  91.            rpclong(val:0)  +
  92.                     
  93.            rpclong(val:strlen(share)) +
  94.            share +
  95.            rpcpad(pad:padsz(len:strlen(share)));
  96.            
  97.   send(socket:soc, data:req);
  98.   r = recv(socket:soc, length:4096);
  99.   if(strlen(r) < 24)
  100.    return NULL;
  101.   else
  102.    {
  103.     if(str2long(val:r, idx:24) != 0)
  104.       return NULL;
  105.       
  106.     ret = "";
  107.     for(i=28;i<60;i++)ret += r[i];
  108.     return ret;
  109.    }
  110. }
  111.  
  112. function readdir(soc, fid)
  113. {
  114.  local_var req, r, i, dir, ret;
  115.  
  116.  req =         rpclong(val:rand()) +
  117.          rpclong(val:0)         +
  118.         rpclong(val:2)      +
  119.         rpclong(val:100003) +
  120.         rpclong(val:2)      +
  121.         rpclong(val:16)     +
  122.         rpclong(val:1)      +
  123.         rpclong(val:48)     +
  124.         rpclong(val:0)          +
  125.         rpclong(val:0)          +
  126.         rpclong(val:0)          +
  127.         rpclong(val:0)        +
  128.         rpclong(val:7)        +
  129.         rpclong(val:0)        +
  130.         rpclong(val:2)        +
  131.         rpclong(val:3)        +
  132.         rpclong(val:4)        +
  133.         rpclong(val:5)          +
  134.         rpclong(val:20)         +
  135.         rpclong(val:31)        +
  136.         
  137.         rpclong(val:0)        +
  138.         rpclong(val:0)        +
  139.         fid            +
  140.         rpclong(val:0)        +
  141.         rpclong(val:8192);
  142.         
  143.  send(socket:soc, data:req);
  144.  r = recv(socket:soc, length:8192);    
  145.  if(strlen(r) <= 24) return NULL;
  146.  if(str2long(val:r, idx:24) != 0) return NULL; # Could not read dir
  147.  
  148.  i = 28;
  149.  ret = make_list();
  150.  while(str2long(val:r, idx:i) == 1)
  151.  {
  152.   if ( i > strlen(r)) break;
  153.   i += 4;
  154.   i += 4; # File ID - don't care
  155.   len = str2long(val:r, idx:i);
  156.   i+=4;
  157.   dir = substr(r, i, i + len - 1);
  158.   i += len;
  159.   i += padsz(len:len);
  160.   i += 4;
  161.   ret = make_list(ret, dir);
  162.  }
  163.  return ret;    
  164. }
  165.  
  166.  
  167. function cwd(soc, dir, fid)
  168. {
  169.  local_var req, ret, i;
  170.  
  171.  
  172.  req = rpclong(val:rand()) +
  173.        rpclong(val:0)      +
  174.        rpclong(val:2)      +
  175.        rpclong(val:100003) +
  176.        rpclong(val:2)      +
  177.        rpclong(val:4)      +
  178.        rpclong(val:1)      +
  179.        rpclong(val:48)      +
  180.        rpclong(val:0)       +
  181.        rpclong(val:0)       +
  182.        rpclong(val:0)       +
  183.        rpclong(val:0)       +
  184.        rpclong(val:7)       +
  185.        rpclong(val:0)       +
  186.        rpclong(val:2)       +
  187.        rpclong(val:3)       +
  188.        rpclong(val:4)       +
  189.        rpclong(val:5)       +
  190.        rpclong(val:20)       +
  191.        rpclong(val:31)       +
  192.        rpclong(val:0)      +
  193.        rpclong(val:0)      +
  194.        fid +
  195.        rpclong(val:strlen(dir)) +
  196.        dir +
  197.        rpcpad(pad:padsz(len:strlen(dir)));
  198.        
  199.    send(socket:soc, data:req);
  200.    r = recv(socket:soc, length:8192);
  201.    if(strlen(r) < 24)
  202.     return NULL;
  203.    
  204.   if(strlen(r) < 24)
  205.     return NULL;
  206.    else
  207.    {
  208.     if(str2long(val:r, idx:24) != 0)
  209.       return NULL;
  210.       
  211.     ret = "";
  212.     for(i=28;i<56;i++)ret += r[i];
  213.     ret += rpclong(val:0);
  214.     return ret;
  215.    }
  216. }
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223. function open(soc, file, fid)
  224. {
  225.  local_var req, ret, i;
  226.  
  227.  
  228.  req = rpclong(val:rand()) +
  229.        rpclong(val:0)      +
  230.        rpclong(val:2)      +
  231.        rpclong(val:100003) +
  232.        rpclong(val:2)      +
  233.        rpclong(val:4)      +
  234.        rpclong(val:1)      +
  235.        rpclong(val:48)      +
  236.        rpclong(val:0)       +
  237.        rpclong(val:0)       +
  238.        rpclong(val:0)       +
  239.        rpclong(val:0)       +
  240.        rpclong(val:7)       +
  241.        rpclong(val:0)       +
  242.        rpclong(val:2)       +
  243.        rpclong(val:3)       +
  244.        rpclong(val:3)       +
  245.        rpclong(val:5)       +
  246.        rpclong(val:20)       +
  247.        rpclong(val:31)       +
  248.        rpclong(val:0)      +
  249.        rpclong(val:0)      +
  250.        fid +
  251.        rpclong(val:strlen(file)) +
  252.        file +
  253.        rpcpad(pad:padsz(len:strlen(file)));
  254.        
  255.    send(socket:soc, data:req);
  256.    r = recv(socket:soc, length:8192);
  257.    if(strlen(r) < 24)
  258.     return NULL;
  259.    
  260.   if(strlen(r) < 24)
  261.     return NULL;
  262.    else
  263.    {
  264.     if(str2long(val:r, idx:24) != 0)
  265.       return NULL;
  266.       
  267.     ret = "";
  268.     for(i=28;i<56;i++)ret += r[i];
  269.     ret += rpclong(val:0);
  270.     return ret;
  271.    }
  272. }
  273.  
  274. function read(soc, fid, length, off)
  275. {
  276.  local_var req, ret, i, len;
  277.  
  278.  
  279.  req = rpclong(val:rand()) +
  280.        rpclong(val:0)      +
  281.        rpclong(val:2)      +
  282.        rpclong(val:100003) +
  283.        rpclong(val:2)      +
  284.        rpclong(val:6)      +
  285.        rpclong(val:1)      +
  286.        rpclong(val:48)      +
  287.        rpclong(val:0)       +
  288.        rpclong(val:0)       +
  289.        rpclong(val:0)       +
  290.        rpclong(val:0)       +
  291.        rpclong(val:7)       +
  292.        rpclong(val:0)       +
  293.        rpclong(val:2)       +
  294.        rpclong(val:3)       +
  295.        rpclong(val:4)       +
  296.        rpclong(val:5)       +
  297.        rpclong(val:20)       +
  298.        rpclong(val:31)       +
  299.        rpclong(val:0)      +
  300.        rpclong(val:0)      +
  301.        fid +
  302.        rpclong(val:off) +
  303.        rpclong(val:length) + 
  304.        rpclong(val:0);
  305.        
  306.    send(socket:soc, data:req);
  307.    r = recv(socket:soc, length:length + 33);
  308.    if(strlen(r) <= 32)
  309.     return NULL;
  310.    
  311.    return substr(r, 32, strlen(r) - 1);
  312. }
  313.  
  314.  
  315. function umount(soc, share)
  316. {
  317.  local_var pad, req, len, r, ret, i;
  318.   
  319.   pad = padsz(len:strlen(this_host_name()));
  320.   len = 52 + strlen(this_host_name()) + pad;
  321.  
  322.  req =  rpclong(val:rand()) +
  323.              rpclong(val:0) +
  324.            rpclong(val:2) +
  325.            rpclong(val:100005) +
  326.            rpclong(val:1) +
  327.            rpclong(val:3) +
  328.            rpclong(val:1) +
  329.            rpclong(val:len) +
  330.            rpclong(val:rand()) +
  331.            rpclong(val:strlen(this_host_name())) +
  332.            this_host_name() +
  333.            rpcpad(pad:pad) +
  334.            rpclong(val:0)  +    
  335.            rpclong(val:0)  +    
  336.            rpclong(val:7)  +    
  337.            rpclong(val:0)  +    
  338.            rpclong(val:2)  +     
  339.            rpclong(val:3)  +    
  340.            rpclong(val:4)  +
  341.            rpclong(val:5)  +
  342.            rpclong(val:20) +
  343.            rpclong(val:31) +
  344.            rpclong(val:0)  +    
  345.            rpclong(val:0)  +
  346.            rpclong(val:0)  +
  347.                     
  348.            rpclong(val:strlen(share)) +
  349.            share +
  350.            rpcpad(pad:padsz(len:strlen(share)));
  351.            
  352.   send(socket:soc, data:req);
  353.   r = recv(socket:soc, length:8192);           
  354. }
  355.  
  356.